﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JGSY.SerialCommunication.UpperComputer.Core.EnumType
{
    /// <summary>
    /// Modbus 协议功能码枚举，定义主站与从站之间通信的功能类型。
    /// 每个功能码对应一种特定的操作，如读取线圈、写入寄存器等。
    /// </summary>
    public enum FuncType : byte
    {
        #region 基本线圈操作 (0x01-0x02)
        /// <summary>
        /// 读取线圈状态 (0x01)
        /// 用于读取从站的离散输出线圈状态（ON/OFF）
        /// </summary>
        [Description("读取线圈状态")]
        ReadCoil = 0x01,

        /// <summary>
        /// 读取离散输入 (0x02)
        /// 用于读取从站的离散输入状态（ON/OFF）
        /// </summary>
        [Description("读取离散输入")]
        ReadInput = 0x02,
        #endregion

        #region 基本寄存器操作 (0x03-0x04)
        /// <summary>
        /// 读取保持寄存器 (0x03)
        /// 用于读取从站的保持寄存器数据（16位值）
        /// </summary>
        [Description("读取保持寄存器")]
        ReadHoldingRegister = 0x03,

        /// <summary>
        /// 读取输入寄存器 (0x04)
        /// 用于读取从站的输入寄存器数据（16位值，通常为只读）
        /// </summary>
        [Description("读取输入寄存器")]
        ReadInputRegister = 0x04,
        #endregion

        #region 单个寄存器/线圈写入 (0x05-0x06)
        /// <summary>
        /// 写入单个线圈 (0x05)
        /// 用于向从站的单个线圈写入布尔值（ON/OFF）
        /// </summary>
        [Description("写入单个线圈")]
        WriteSingleCoil = 0x05,

        /// <summary>
        /// 写入单个保持寄存器 (0x06)
        /// 用于向从站的单个保持寄存器写入16位值
        /// </summary>
        [Description("写入单个保持寄存器")]
        WriteSingleRegister = 0x06,
        #endregion

        #region 批量操作 (0x0F-0x10)
        /// <summary>
        /// 写入多个线圈 (0x0F)
        /// 用于向从站的多个连续线圈写入布尔值数组
        /// </summary>
        [Description("写入多个线圈")]
        WriteMultipleCoils = 0x0F,

        /// <summary>
        /// 写入多个保持寄存器 (0x10)
        /// 用于向从站的多个连续保持寄存器写入16位值数组
        /// </summary>
        [Description("写入多个保持寄存器")]
        WriteMultipleRegisters = 0x10,
        #endregion

        #region 高级功能码 (0x14-0x2B)
        /// <summary>
        /// 报告从站ID (0x11)
        /// 用于获取从站设备的标识信息
        /// </summary>
        [Description("报告从站ID")]
        ReportSlaveId = 0x11,

        /// <summary>
        /// 读取文件记录 (0x14)
        /// 用于读取从站的文件记录数据
        /// </summary>
        [Description("读取文件记录")]
        ReadFileRecord = 0x14,

        /// <summary>
        /// 写入文件记录 (0x15)
        /// 用于向从站的文件记录写入数据
        /// </summary>
        [Description("写入文件记录")]
        WriteFileRecord = 0x15,

        /// <summary>
        /// 掩码写入寄存器 (0x16)
        /// 用于对从站的保持寄存器进行按位掩码操作
        /// </summary>
        [Description("掩码写入寄存器")]
        MaskWriteRegister = 0x16,

        /// <summary>
        /// 读取/写入多个寄存器 (0x17)
        /// 组合读取和写入操作，先读取后写入寄存器
        /// </summary>
        [Description("读取/写入多个寄存器")]
        ReadWriteMultipleRegisters = 0x17,

        /// <summary>
        /// 读取FIFO队列 (0x18)
        /// 用于读取从站的FIFO队列数据
        /// </summary>
        [Description("读取FIFO队列")]
        ReadFifoQueue = 0x18,

        /// <summary>
        /// 读取设备识别码 (0x2B-0xE)
        /// 用于获取从站的扩展设备识别信息
        /// </summary>
        [Description("读取设备识别码")]
        ReadDeviceIdentification = 0x2B,
        #endregion

        #region 异常功能码 (0x80-0xFF)
        /// <summary>
        /// 异常响应基值
        /// 实际异常功能码 = 正常功能码 + 0x80
        /// </summary>
        ExceptionResponseBase = 0x80,
        #endregion
    }
}
